package com.gitee.wsl.logger.compress

import com.gitee.wsl.logger.debugLog
import com.gitee.wsl.logger.disk.BaseLogDiskStrategy
import java.io.File

/**
 * 日志压缩策略
 */
abstract class BaseLogCompressStrategy  {

    /**
     * 调用这里开始压缩文件
     * @param diskStrategy 当前的日志存储策略
     * @param logDir 日志文件夹
     */
    open fun compressLog(diskStrategy: BaseLogDiskStrategy, logDir: String) {
            val logList = getCompressLogs(diskStrategy)
            debugLog("需要压缩日志数量:${logList.size} \n 日志名称:${
                logList.toTypedArray().contentToString()
            }")
            if (logList.isEmpty()) {
                return
            }

            logList.forEach {
                val logZip = compressOne(diskStrategy,it)
                if(logZip != null && logZip.isFile && isDeleteOriginal()){
                    debugLog("删除日志文件:${it.absolutePath}")
                    it.deleteOnExit()
                }
            }
    }

    /**
     * 获取需要被压缩的的文件
     */
    abstract fun getCompressLogs(diskStrategy: BaseLogDiskStrategy): List<File>

    /**
     * 压缩一个文件
     * @param logFile 需要压缩日志文件
     * @return 压缩后的文件名称，压缩失败返回 null
     */
    abstract fun compressOne(diskStrategy: BaseLogDiskStrategy, logFile: File): File?

    /**
     * 压缩完成是否删除原件
     */
    abstract fun isDeleteOriginal(): Boolean

    /**
     * 判断是否是压缩文件
     */
    abstract fun isCompressFile(compressFile:File):Boolean

}